2025-05-28

Kiedy w bicep próbujesz utworzyć określony zasób używasz pewnych typów zasobów, które oprócz nazwy, muszą też być obsługiwane przez odpowiednie API. A skąd takie API wziąć? Można je wylistować:

az provider show --namespace Microsoft.Authorization --query "resourceTypes[?resourceType=='denyAssignments'].apiVersions"

przykladowy wynik to:

[
[
"2024-07-01-preview",
"2024-05-01-preview",
"2022-04-01",
"2019-03-01-preview",
"2018-07-01-preview",
"2018-07-01"
]
]

Dzięki temu można teraz budować ciąg dlaszy w postaci bicep

@description('Tworzy deny assignment blokujący zapis do Storage Account Blob Container')
resource storageAccount 'Microsoft.Storage/storageAccounts@2025-01-01' = {
name: 'delmedrritjo'
location: 'westeurope'
scope: resourceGroup()
}
resource denyAssignment 'Microsoft.Authorization/denyAssignments@2022-04-01' = {
name: '123e4567-e89b-12d3-a456-426614174000'
location: 'westeurope'
scope: storageAccount
properties: {
denyAssignmentName: 'deny-write-storage-container'
permissions: [
{
denyActionNames: [
'Microsoft.Storage/storageAccounts/blobServices/containers/write'
'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'
]
}
]
principals: [ // Dodajemy użytkownika, dla którego stosujemy blokadę
{
id: '90e-XXXXX-d98' // Object ID użytkownika
type: 'User' // Określenie typu Principal (może być 'User', 'Group', 'ServicePrincipal')
}
]
description: 'Blokada zapisu do Storage Account Blob Container'
}
}

i wysylac go do wykonania:

az deployment group create --template-file main.bicep --resource-group delme
By Rafał Kraik in Azure

GitHub: Przeniesienie repozytorium

2025-05-24

Dajmy na to że masz dwa konta na GitHub. Chcesz przenieść repozytorium z jednego konta na drugie. W takim przypadku można wykonać „bare copy”. Oto jak:

  1. Najpierw ściągnij źródłowe repozytorium z oryginalnego repo do siebie lokalnie na komputer. Użyj polecenia clone z parameterem –bare

git clone --bare https://github.com/original_account/original_repo.git

  1. Teraz utwórz nowe puste repo na docelowym koncie
  2. Wyślij repozytorium używając polecenia push z przełącznikiem mirror:

git push --mirror https://github.com/destination_account/destination_repo

By Rafał Kraik in Git

Azure: Terraform: id, principal_id, client_id

2025-03-27

Niektóre zasoby w Azure, jak np. managed identity mogą mieć kilka identyfikatorów, całkiem jak my: nr PESEL, numer dowodu, numer paszportu. Każdy z tych ID może być wykorzystywany tylko w określonej sytuacji.

Oto główne różnice między idprincipal_id i client_id w Azure dla managed identity:

  1. id:
    • Jest to ogólny identyfikator każdego zasobu w Azure. Może to być storage account, dysk, baza danych, czy właśnie managed identity, np.: azurerm_user_assigned_identity.example.id
  2. principal_id:
    • Jest to identyfikator przypisanej tożsamości użytkownika (Managed Identity) lub aplikacji (Service Principal) w EntraID. Używamy go np. do nadawania uprawnień, np.:azurerm_user_assigned_identity.example.principal_id
  3. client_id:
    • To specyficzny przypadek, bo jest to identyfikator aplikacji zarejestrowanej w Azure EntraID. Używamy go do konfiguracji mechanizmów uwierzytelniania – ale uwaga, tylko w takich jak OAuth, czy np. do uzyskiwania tokenów dostępu: azurerm_user_assigned_identity.example.client_id
By Rafał Kraik in Azure

Spark 3.5.5 – instalacja w punktach

2025-03-02

Zainstaluj Java JDK w wersji 17, np. do katalogu c:\spark\java

Zainstaluj WinUtils w wersji 3.3.6 (jeśli używasz Windows 11) np do katalogu c:\spark\hadoop

Zainstaluj Spark 3.5.5 z Hadoop 3.3, np. do katalogu c:\spark\spark

Zainstaluj Python 3.11, np. do katalogu c:\spark\python. Wykonaj dodatkową kopię pliku python.exe i nazwij ją python3.exe

Zdefiniuj zmienne środowiskowe np. dla użytkownika:

HADOOP_HOME –> c:\spark\hadoop

JAVA_HOME –> C:\spark\java

SPARK_HOME –> C:\spark\spark

PATH –> C:\spark\python\Scripts\;C:\spark\python\;%JAVA_HOME%\bin;%SPARK_HOME%\bin;%HADOOP_HOME%\bin;%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;

By Rafał Kraik in Python

Spark – tworzenie środowiska

2025-03-02

Zakładając, że masz już zainstalowany Apache Spark, a teraz chcesz zacząć na nim własne eksperymenty, to pewnie przydałoby się jakieś „lekkie” środowisko – miminum z działającym Jupyter Notebook. Oto moja propozycja

W wybranym katalogu utwórz środowisko wirtualne

python -m venv venv

Aktywuj je

.\venv\scripts\activate

Zainstaluj moduły

pip install findspark
pip install pyspark
pip install jupyter

Uruchom Jupyter Notebook

jupyter notebook
By Rafał Kraik in SQL

Spark: Przykład prostego, małego data frame

2025-03-02

Wykonując testy, warto mieć pod ręką coś małego, co powinno zawsze zadziałać. Oto moja propozycja:

import findspark 

findspark.init()
findspark.find()
from pyspark.sql import SparkSession

# Create a SparkSession object
spark = SparkSession.builder.appName("CreateDataFrame").getOrCreate()

# Use the SparkSession object to create a DataFrame
df_day_of_week = spark.createDataFrame([(0, "Sunday"), (1, "Monday"),
                                        (2, "Tuesday"), (3, "Wednesday"),
                                        (4, "Thursday"), (5, "Friday"),
                                        (6, "Saturday")],
                                       ["day_of_week_num", "day_of_week"])
# Show the DataFrame
df_day_of_week.show()

Snippet pochodzi z https://stackoverflow.com/questions/76743484/configuration-of-pyspark-py4jjavaerror

By Rafał Kraik in Python

Spark: Błąd po wykonaniu df.show()

2025-03-02

W świeżej instalacji Apache Spark po wykonaniu polecenia df.show() dla prostego data frame pojawiał się bład:
Py4JJavaError: An error occurred while calling o160.showString.
Instalacja nowa, robiona zgodnie z 1000 instrukcji dostępnych na necie.

Bez owijania w bawełnę – chodziło o wersje aplikacji. Tak więc krótko:

Instalacja dotyczy Spark 3.5.5 (FEB 27 2025) z wbudowanym Apache Hadoop 3.3

Java (JDK) – najnowsza jaką można wybrać to 17, bo na tej stronie https://spark.apache.org/docs/latest/index.html piszą, że Spark runs on Java 8/11/17,

WinUtils.exe – dopasowany numerem wesji do wersji Hadoop pobrany stąd: https://github.com/cdarlint/winutils

Python – piszą w dokumentacji, że wersja to ma być 3.8 i wyższe, ale uwaga… W momencie publikowania Sparka, na świecie nie było jeszcze Pythona 3.12. Dlatego nie wybieraj 3.12. Zostań maksymalnie przy 3.11. To ważne. Nawet jak instalacja sie uda, to potem można się spodziewać pułapek już podczas uruchamiania programów.

Co więcej – instalując wszystkie wymienione powyżej komponenty, zainstaluj je do katalogu, który w nazwie całej ścieżki nie ma spacji, ani znaków narodowych.

I co najśmieszniejsze – w świecie Linux/McOS, kiedy chcesz uruchomić pythona w wersji 3 piszesz python3. Ta reguła nie działa w świecie WIndows. Dlatego przejdź do katalogu z instalacją pythona i skopiuj plik python.exe zamieniając mu nazwę na python3.exe.

Pr

By Rafał Kraik in Python